import { defineStore } from "pinia";
import { lStorage } from "@/utils/storage";
import Cookies from "js-cookie";

export const useUserStore = defineStore("user", {
  state: () => ({
    token: "", // 用户登录令牌
    userInfo: {} // 用户信息
  }),

  actions: {
    // 设置 token
    setToken(token) {
      this.token = token;
      lStorage.set("USER_TOKEN", token); // 更新缓存
      Cookies.set("USER_TOKEN", token, {
        expires: 7
      }); // 更新 Cookies
    },

    // 设置用户信息
    setUserInfo(userInfo) {
      this.userInfo = userInfo;
      lStorage.set("USER_INFO", userInfo); // 更新缓存
      Cookies.set("USER_INFO", JSON.stringify(userInfo), {
        expires: 7
      }); // 更新 Cookies
    },

    // 清空用户数据
    clearUserData() {
      this.token = "";
      this.userInfo = {};
      lStorage.remove("USER_TOKEN");
      lStorage.remove("USER_INFO");
      Cookies.remove("USER_TOKEN");
      Cookies.remove("USER_INFO");
    },

    // 初始化用户数据
    initializeUserData() {
      // 从 localStorage 和 Cookies 中尝试获取 token
      const localToken = lStorage.get("USER_TOKEN") || "";
      const cookieToken = Cookies.get("USER_TOKEN") || "";

      // 优先使用存在的 token，互相补充
      this.token = localToken || cookieToken;
      if (!localToken && cookieToken) {
        lStorage.set("USER_TOKEN", cookieToken); // 如果 localStorage 缺失，从 Cookies 恢复
      }
      if (!cookieToken && localToken) {
        Cookies.set("USER_TOKEN", localToken, {
          expires: 7
        }); // 如果 Cookies 缺失，从 localStorage 恢复
      }

      // 从 localStorage 和 Cookies 中尝试获取用户信息
      const localUserInfo = lStorage.get("USER_INFO") || {};
      const cookieUserInfo = Cookies.get("USER_INFO")
        ? JSON.parse(Cookies.get("USER_INFO") || "{}")
        : {};

      // 优先使用存在的用户信息，互相补充
      this.userInfo = Object.keys(localUserInfo).length
        ? localUserInfo
        : cookieUserInfo;
      if (
        !Object.keys(localUserInfo).length &&
        Object.keys(cookieUserInfo).length
      ) {
        lStorage.set("USER_INFO", cookieUserInfo); // 如果 localStorage 缺失，从 Cookies 恢复
      }
      if (
        !Object.keys(cookieUserInfo).length &&
        Object.keys(localUserInfo).length
      ) {
        Cookies.set("USER_INFO", JSON.stringify(localUserInfo), {
          expires: 7
        }); // 如果 Cookies 缺失，从 localStorage 恢复
      }
    }
  }
});
